#include "HuevoReloj.h"

using namespace TP::Juego::Arena::Actores;
using namespace TP::Juego::Arena::Utilidades;
using namespace std;

HuevoReloj::HuevoReloj() : Huevo(HUEVORELOJ){
    this->setVida(vida_huevo_poche);
    this->_tiempoRequerido = 0;
    this->_timer = 0;
}

HuevoReloj::HuevoReloj(const string& pNombre, unsigned int tiempoRequerido) : Huevo(pNombre){
    this->setVida(vida_huevo_poche);
    this->_tiempoRequerido = tiempoRequerido;
    this->_timer = 0;
}

HuevoReloj::~HuevoReloj() {}

IColisionado* HuevoReloj::colisionar(IColisionado* pColisionado){
	string& rol = pColisionado->getRol()->Nombre();
	
//	if (rol == PAJARITO) {
//		// Hacer 0.25 de dmg
//	} else if (rol == CAJA) {
//		// Hacer 0.5 de dmg
//	} else if (rol == PERIMETRO) {
//		// Destruirse
//	} else if (rol == PISO) {
//		// Destruirse
//	}
}

string HuevoReloj::aXML(){

    TiXmlDocument* doc = new TiXmlDocument();
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());

    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}


string HuevoReloj::aXML(const string& pPath){

    TiXmlDocument* doc = new TiXmlDocument(pPath.c_str());
    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
    doc->LinkEndChild( decl );
    
    doc->LinkEndChild(this->aElementoXML());
    
    TiXmlPrinter printer;
    doc->Accept(&printer);
    return printer.CStr();    
}

void HuevoReloj::parseXML (const string& pDescriptor){

    TiXmlDocument doc;
    doc.Parse(pDescriptor.c_str(), 0, TIXML_ENCODING_UTF8);
    this->deElementoXML(doc.FirstChildElement());
}

TiXmlElement* HuevoReloj::aElementoXML (){
    
    TiXmlElement * element = new TiXmlElement(HUEVORELOJ);

    element->SetAttribute("nombre", this->Nombre().c_str());  
    element->LinkEndChild(this->getTrayectoria()->aElementoXML());
    return element;
}

void HuevoReloj::deElementoXML (TiXmlElement* pElemento){

    if (strcmp (pElemento->Value(), HUEVORELOJ) == 0)
    {
        this->setNombre(pElemento->Attribute("nombre"));
        
        Trayectoria* trayectoria = new Trayectoria ();
        trayectoria->deElementoXML (pElemento->FirstChildElement());
        this->setTrayectoria(trayectoria);
    }
}

double HuevoReloj::getPoderAtaqueContraPajarito () {
    return danio_huevo_reloj_pajaro;
}
    
double HuevoReloj::getPoderAtaqueContraSuperficie () {
    return danio_huevo_reloj_superficie;
}

 double HuevoReloj:: getPoderAtaqueContraCerditos () {
     return danio_huevo_reloj_cerditos;
 }
 
 double HuevoReloj::getRadio() {
     return radio_huevo_reloj;
 }
     
 double HuevoReloj::getRadioExplosion() {
     return radio_huevo_reloj_timeout;
 }
 
 int HuevoReloj::getPuntos() {
     return puntos_huevo_reloj;
 }